Uen的个人网站

我的博客和工具箱

VS Code 中 gopls 的安装问题及解决方案 - Ubuntu

最近在使用 VS Code 编写 Go 代码时遇到安装 gopls 失败的问题,尝试多种方法未果,最终通过安装系统自带的 gopls 解决。

问题重现

最近在 vs code 中使用 go 语言写代码时右下角总是出现下面的弹窗,每次无论点击 install 还是 install all 都是安装失败。

how-to-solve-vs-code-gopls-command-is-not-available-1

安装报错:

# 安装指令
go install -v golang.org/x/tools/gopls@latest 
# 报错
../../../go/pkg/mod/golang.org/x/tools/[email protected]/internal/golang/comment.go:12:2: package go/doc/comment is not in GOROOT (/usr/lib/go-1.18/src/go/doc/comment) 

报错后其实没有影响我的正常使用,因此没管它。直到有一次在我的另一台电脑上问题重现,并且一点击 install 就成功安装后才发现这是个好东西。它能够实现诸如自动完成, 代码提示等功能。因此今日决定 fix 这个遗留问题。

尝试过的方法

  1. 根据报错 package go/doc/comment is not in GOROOT,怀疑是 GOROOT 没有正确配置
export GOROOT=/usr/lib/go

清理模块缓存并重新下载:

go clean -modcache
go install -v golang.org/x/tools/gopls@latest

仍然无法解决问题。

  1. 手动安装 go/doc/comment
go get -u golang.org/x/tools/godoc
go install -v golang.org/x/tools/gopls@latest

仍然无法解决。

查询网上资料,可能是网络问题,但本地早已正确配置相关代理,排除。

最终解决方案

在 stackoverflow1 上看到有人用 brew install gopls 解决了。我用的是 Ubuntu,尝试搜索该包并安装。

# 还真有 gopls 包
sudo apt search gopls 
sudo apt install gopls

搞定!比网上改配置、改环境、手动下载的方法简单多了,一行代码搞定。能用系统自带包解决还要啥自行车?

课外知识2 - Language Server Protocol

Go 扩展默认是使用大量的 Go 工具来提供各种功能的, 每个工具提供某个方面的能力, 比如代码提示是依靠 gocode 的.

不过微软在开发 VS Code 过程中, 定义一种协议, 语言服务器协议, Language Server Protocol.

这可是个好东西, 如果你需要开发编辑器或 IDE, 就不需要再为每种语言实现诸如自动完成, 代码提示等功能了, 直接利用 语言服务器协议 就行了.

而 gopls 就是官方的语言服务器.